package com.junxian.springboot01.common;

import com.junxian.springboot01.service.Programer;
import com.junxian.springboot01.service.XiaoSun;

import java.lang.reflect.Proxy;

/**
 * JDK动态代理
 */
public class DynamicJDKAgent {

    public static void main(String[] args) {
        XiaoSun xiaoSun = new XiaoSun();

        //Proxy类提供一个newProxyInstance方法，生成XiaoSun对象的代理对象，该方法需要三个参数
        //参数一：被代理对象的类加载器 参数二：被代理对象的接口 参数三：生成的代理对象的方法里干什么事【实现handler接口，我们想怎么实现就怎么实现】
        Programer programer = (Programer)Proxy.newProxyInstance(xiaoSun.getClass().getClassLoader(), xiaoSun.getClass().getInterfaces(), (proxy, method, args1) -> {
            if (method.getName().equals("coding")) {
                method.invoke(xiaoSun, args1);
                System.out.println("导师来帮忙检查了");
            } else {
                method.invoke(xiaoSun, args1);
            }
            return null;
        });

        programer.coding();
    }
}
